package com.dz.reflect;

import java.lang.reflect.Field;
import java.util.Objects;

public class ReflectDemo04 {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {

        Cat cat = new Cat("A", "black", 1);
        Cat cat1 = new Cat("A", "black", 1);

        // 需求，比较两个对象的值是否一直
//        System.out.println(diff(cat, cat1) ? "一样" : "不一样");
//        System.out.println(diff(cat, cat) ? "一样" : "不一样");
        Dog dog = new Dog();
        System.out.println(diff(cat, cat1));
    }

    public static boolean diff(Object o, Object o1) throws IllegalAccessException {
        // 1, 拿到字节码
        // 2、拿到所有属性的值
        // 3、分别比较属性的值

        if (o == o1) {// 两个对象执行同一个地方
            return true;
        }
        Class c1 = o.getClass();
        Class c2 = o1.getClass();
        if (!c1.equals(c2)) {
            return false;
        }
        Field[] fields = c1.getDeclaredFields();// 拿到o对象所有属性
        for (Field field : fields) {
            field.setAccessible(true);
            Object v1 = field.get(o);// o对象属性的值
            Object v2 = field.get(o1);// o1对象属性的值
            if (!Objects.equals(v1, v2)) {
                return false;
            }
        }

        return true;
    }
}
